<?php
/**
 * @Author: king
 * @Last Modified by:   king
 * Date: 2018/8/31
 * Time: 10:46
 */

namespace App\Http\Controllers\Api\v1\Everyday;

use App\Http\Controllers\Controller;

class ActiveController extends Controller
{
    // 行运数据
    public $transitsData = [];
    // 三限数据
    public $thirdprogressedData = [];
    // 整宫制本命盘数据
    public $natalData = [];
    // 相位系数
    private $phase_modulus = [0=>1,180=>0.8,90=>0.75,120=>0.7,60=>0.6];
    // 初始化宫位分数
    private $transits_house_score;
    private $thirdprogressed_house_score;
    // 初始化行运（流年）日月水金火木分数
    private $transits_palent_score;
    // 初始化三限日月水金火木分数
    private $thirdprogressed_palent_score;
    // 行运月亮 不计行运月亮活跃
    private $tr_moon_not_tr_score = 0;
    // 三限相位容许系数
    private $orb_modulus = ['0.5'=>1,'1'=>0.95,'2'=>0.9,'3'=>0.8,'20'=>0.7];


    public function init()
    {
        // 婚恋
         $love = 0;
        // 出行
         $trip = 0;
        // 财富
         $money = 0;
        // 工作
         $work = 0;
        // 健康
         $health = 0;
        // 学业
         $study = 0;
        // 家庭
         $home = 0;
        // 交际
         $chat = 0;
        // 心情
         $mood = 0;


        $tp_planet = $this->thirdprogressedData['planets'];

        //三限月链 35%，如得分大于等于50则以45计
        // 月链
        $moonRelationship = $this->relationship(1);
        // 日链
        $sunRelationship = $this->relationship(0);
        // 金星链
        $venuRelationship = $this->relationship(3);
        // 水星链
        $mercRelationship = $this->relationship(2);
        // 火星链
        $marsRelationship = $this->relationship(4);

        // 月亮所在宫位
        $moon_house = $tp_planet[1]['house'];
        // 无月链
        if(!empty($tp_planet[1]['phase']))
        {
            // 无月链时，月亮所在宫位+10
            $moon_house_add = 10;
        }

        $modulus = 1;

        // 日链 若太阳有相位且不属于月链，求太阳链，规则与月亮相同，最终得分/2
        if(!empty($tp_planet[0]['phase'])
            && !isset($moonRelationship['planet_element'][0]))
        {
            $num = 0;
            if(isset($sunRelationship['planet_element'][2])) $num++;
            if(isset($sunRelationship['planet_element'][3])) $num++;
            if(isset($sunRelationship['planet_element'][4])) $num++;

            // 金水火之一颗星入链则*1.2
            if($num == 1) $modulus = 1.2;
            // 两颗星*1.3
            elseif($num == 2) $modulus = 1.3;
            // 三颗星*1.4
            elseif($num == 3) $modulus = 1.4;
        }
        // 若金星有相位且金星不属于日月链，求金星链
        elseif (!empty($tp_planet[3]['phase'])
            && !isset($moonRelationship['planet_element'][3])
            && !isset($sunRelationship['planet_element'][3])
        )
        {
            $num = 0;
            if(isset($sunRelationship['planet_element'][2])) $num++;
            if(isset($sunRelationship['planet_element'][4])) $num++;

            // 水火之一入链则*1.2
            if($num == 1) $modulus = 1.2;
            // 水火都入链则*1.3
            elseif($num == 2) $modulus = 1.3;


            // 若太阳也空，则最终得分/2
            if(empty($tp_planet['phase']))
            {

            }
            // 否则最终得分/3
            else
            {

            }
        }
        // 若水星有相位且水星不属于日月金链，求水链
        elseif (!empty($tp_planet[2]['phase'])
            && !isset($venuRelationship['planet_element'][2])
            && !isset($moonRelationship['planet_element'][2])
            && !isset($sunRelationship['planet_element'][2])
        )
        {
            $num = 0;
            if(isset($sunRelationship['planet_element'][4])) $num++;

            // 火星入链则*1.2
            if($num == 1) $modulus = 1.2;


            // 若太阳也空，则最终得分/2
            if(empty($tp_planet[0]['phase']))
            {

            }
            // 否则最终得分/3
            else
            {

            }
        }
        // 若火星有相位且火星不属于日月金水链，求火链
        elseif (!empty($tp_planet[2]['phase'])
            && !isset($venuRelationship['planet_element'][2])
            && !isset($moonRelationship['planet_element'][2])
            && !isset($sunRelationship['planet_element'][2])
        )
        {
            $num = 0;

            // 若太阳也空，则最终得分/2.5
            if(empty($tp_planet[0]['phase']))
            {

            }
            // 否则最终得分/3.5
            else
            {

            }
        }
        // 日金水火链所得相加
        else
        {

        }
        // 有月链时的日金水火链（不超过15分，取其最大值对应15分）


        //三限额外激发
        //	月亮与火土天海冥之一冲
        //		月亮在4/8/12
        //			各项+10*冲相位容许系数
        //				事业
        //				学业
        //				若此时金星受两颗以上凶星合刑冲或月亮与金星刑冲
        //					婚恋/交际
        //		月亮与火土天海冥另外几个中的成相，每多一个
        //			各项+5*对应相位容许系数
        //		月亮与其它星成刑冲相，每多一个
        //			各项+5*对应相位容许系数
        //	月亮无冲但位于T三角顶点
        //		以下各项+10*月亮与T臂中星体最紧密相位的容许系数
        //			T臂上的星体所应对事项
        //				金，人际
        //					若金在2/8或月亮在2/8也对应财富
        //					若金在5/7/11或月亮在4/5/7也对应婚恋
        //				水，学习，出行
        //				日，工作
        //			T臂星体所在宫位对应事项
        //				1-7，人际，婚恋
        //				2-8，财富
        //				3-9，出行，学习
        //				4-10，工作，家庭
        //				5-11，婚恋，人际
        //				6-12，健康，工作
        //			月亮所在宫位对应事项
        // 月亮与火土天海冥之一冲
        $phase_180_min = 20;
        $phase_orb_modulus = 0.7;// 默认3度外  0.7
        $is_moon_phase180_46789 = false;
        $is_moon_phase180 = false;// 月亮是否有冲相位
        if(!empty($tp_planet[1]['phase']))
        {
            foreach ($tp_planet[1]['phase'] as $phase)
            {
                if(in_array($phase['id'],[4,6,7,8,9]) && $phase['phase_e'] == 180)
                {
                    $is_moon_phase180_46789 = true;
                    if($phase['phase_orb'] < $phase_180_min)
                    {
                        $phase_180_min = $phase['phase_orb'];
                        // 三限容许系数
                        // 30分内1
                        if($phase['phase_orb'] < 0.5)
                        {
                            $phase_orb_modulus = 1;
                        }
                        // 30分-1度0.95
                        elseif($phase['phase_orb'] < 1)
                        {
                            $phase_orb_modulus = 0.95;
                        }
                        // 1度-2度0.9
                        elseif($phase['phase_orb'] < 2)
                        {
                            $phase_orb_modulus = 0.9;
                        }
                        // 2度-3度0.8
                        elseif($phase['phase_orb'] <= 3)
                        {
                            $phase_orb_modulus = 0.8;
                        }
                    }

                }
                if($phase['phase_e'] == 180)
                {
                    $is_moon_phase180 = true;
                }
            }
        }
        if($is_moon_phase180_46789)
        {
            // 月亮在4/8/12
            if(in_array($tp_planet[1]['in_house_id'],[4,8,12]))
            {
                // 各项+10*冲相位容许系数，如果多个用最紧密
                $change = 10 * $phase_orb_modulus;

                $work += $change;// 事业

                $study += $change;// 学业

                if(1)
                {

                }
            }
            elseif(1)
            {

            }
        }
        elseif($is_moon_phase180 === false && 1)
        {

        }









    }

    protected function relationship($p)
    {
        $tp_planet = $this->thirdprogressedData['planets'];

        $planet = $tp_planet[$p];

        $p_house = $planet['in_house_id'];

        $house_score[$p_house] = 0;
        $planet_score[$p] = 0;
        // 主题元素
        $planet_element = $house_element =  [];

        if(!isset($house_element[$p_house])) $house_element[$p_house] = 1;

        // 行星在N宫内非空相
        if(!empty($planet['phase']))
        {
            $house_score[$p_house] += 20;

            $other_house_phase_num = 0;

            $phase_house_array = [];

            foreach ($planet['phase'] as $phase)
            {
                // 星体记分 初始化
                if(!isset($planet_score[$phase['id']]))
                {
                    $planet_score[$phase['id']] = 0;
                }
                // 星体落宫 触动星所在宫
                $phase_house = $tp_planet[$phase['id']]['in_house_id'];

                if($phase_house != $p_house)
                {
                    // 外宫相位计数
                    $other_house_phase_num++;
                    // 相位触动星 本宫  行星记分
                    $planet_score[$phase['id']] += 20;
                }
                else
                {
                    // 相位触动星 非本宫 行星记分
                    $planet_score[$phase['id']] += 15;
                }
                // 触动星所在宫（宫位记分1次） 【13】 如多颗触动星在同一宫，除第一颗外取值折半
                if(!isset($phase_house_array[$phase_house])) $phase_house_array[$phase_house] = 1;
                else $phase_house_array[$phase_house]++;

                // 触动星星体元素次数
                if(!isset($planet_element[$phase['id']])) $planet_element[$phase['id']] = 1;
                else $planet_element[$phase['id']]++;
                // 触动星宫位元素次数
                if(!isset($house_element[$phase_house])) $house_element[$phase_house] = 1;
                $house_element[$phase_house]++;

                $pphase_house_array = [];
                if(!empty($tp_planet[$phase['id']]['phase']))
                {
                    // 触动星的触动星
                    foreach ($tp_planet[$phase['id']]['phase'] as $pphase)
                    {
                        // 与主星无相位
                        if(!isset($tp_planet[$pphase['id']]['phase'][$pphase['id'].'-'.$p]))
                        {
                            $planet_score[$pphase['id']] += 8;
                        }
                        // 触动星的触动星所在宫
                        $pphase_house = $tp_planet[$pphase['id']]['in_house_id'];

                        if(!isset($pphase_house_array[$pphase_house])) $pphase_house_array[$pphase_house] = 1;
                        else $pphase_house_array[$pphase_house]++;
                    }
                }
            }

            $house_score[$p_house] += 5 * $other_house_phase_num;

            if(!empty($phase_house_array))
            {
                foreach ($phase_house_array as $k => $pha)
                {
                    $house_score[$k] += (13 + ($pha - 1) * 13 /2);
                }
            }
            if(!empty($pphase_house_array))
            {
                foreach ($pphase_house_array as $k => $pha)
                {
                    $house_score[$k] += (7 + ($pha - 1) * 7 /2);
                }
            }
        }

        for($i = 0; $i < 10; $i++)
        {
            // 宫内星
            if($tp_planet[$i]['in_house_id'] == $p_house && $i != $p)
            {
                // 合相
                if(isset($planet['phase'][$p.'-'.$i]) && $planet['phase'][$p.'-'.$i]['phase_e'] == 0)
                {
                    $house_score[$p_house] += 10;
                }
                else
                {
                    if($i == 0)
                    {
                        $house_score[$p_house] += 5;
                    }
                    elseif(in_array($i,[2,3,4]))
                    {
                        $house_score[$p_house] += 3;
                    }
                    elseif($i == 5)
                    {
                        $house_score[$p_house] += 4;
                    }
                    elseif(in_array($i,[6,7,8,9]))
                    {
                        $house_score[$p_house] += 2;
                    }
                }

                // 星体元素次数
                if(!isset($planet_element[$i])) $planet_element[$i] = 1;
                else $planet_element[$i]++;
                // 宫位元素次数
                if(!isset($house_element[$p_house])) $house_element[$p_house] = 1;
                $house_element[$p_house]++;
            }
        }

        $result = [
            'planet_score'=>$planet_score,// 行星元素总得分
            'house_score'=>$house_score,// 宫位元素总得分
            'planet_element'=>$planet_element,// 行星元素出现次数
            'house_element'=>$house_element,// 宫位元素出现次数
        ];
        return $result;
    }

    protected function transitsActive()
    {
        $tr_planet = $this->transitsData[1]['planets'];// 行运外盘数据
        $tr_planet2 = $this->transitsData[0]['planets'];// 行运内盘数据

        $planet_score = [0,0,0,0,0,0,0,0,0,0];// 行星得分
        $house_score = [1=>0,2=>0,3=>0,4=>0,5=>0,6=>0,7=>0,8=>0,9=>0,10=>0,11=>0,12=>0];// 宫位得分

        for($i=0;$i<10;$i++)
        {
            // 日月水金火
            if($i < 5)
            {
                if(!empty($tr_planet[$i]['phase']))
                {
                    foreach ($tr_planet[$i]['phase'] as $phase)
                    {
                        if($phase['id'] > 9) continue;
                        $add = 0;
                        // 冲合
                        if(in_array($phase['phase_e'],[0,180]))
                        {
                            if($i == 0)
                            {
                                $add = 20;
                            }
                            elseif($i == 2)
                            {
                                $add = 15;
                            }
                            elseif($i == 3)
                            {
                                $add = 15;
                            }
                            elseif($i == 4)
                            {
                                $add = 12;
                            }
                            elseif($i == 1)
                            {
                                $add = 9;
                            }
                        }
                        // 拱六分刑
                        elseif(in_array($phase['phase_e'],[60,90,120]))
                        {
                            if($i == 0)
                            {
                                $add = 14;
                            }
                            elseif($i == 2)
                            {
                                $add = 11;
                            }
                            elseif($i == 3)
                            {
                                $add = 11;
                            }
                            elseif($i == 4)
                            {
                                $add = 9;
                            }
                            elseif($i == 1)
                            {
                                $add = 7;
                            }
                        }
                        // 成相本命星体影响系数
                        if($phase['id'] == 0 || $phase['id'] == 1)
                        {
                            $phase_modulus = 1;
                        }
                        elseif($phase['id'] == 2 || $phase['id'] == 3 || $phase['id'] == 4)
                        {
                            $phase_modulus = 0.9;
                        }
                        elseif($phase['id'] == 5 || $phase['id'] == 6)
                        {
                            $phase_modulus = 0.7;
                        }
                        // if($phase['id'] == 7 || $phase['id'] == 8 || $phase['id'] == 9)
                        else
                        {
                            $phase_modulus = 0.5;
                        }

                        // 行运容许系数
                        // 30分内
                        if($phase['phase_orb'] < 0.5)
                        {
                            $orb_modulus = 1;
                        }
                        // 1度内
                        elseif($phase['phase_orb'] < 1)
                        {
                            $orb_modulus = 0.95;
                        }
                        // 1.5内
                        elseif($phase['phase_orb'] < 1.5)
                        {
                            $orb_modulus = 0.85;
                        }
                        // 2内
                        else
                        {
                            $orb_modulus = 0.7;
                        }

                        $h_add = 0;

                        if($i == 0)
                        {
                            $h_add = 10;
                        }
                        elseif($i == 2)
                        {
                            $h_add = 6;
                        }
                        elseif($i == 3)
                        {
                            $h_add = 6;
                        }
                        elseif($i == 4)
                        {
                            $h_add = 4;
                        }
                        elseif($i == 1)
                        {
                            $h_add = 3;
                        }

                        // 成相星落宫
                        $phase_in_house = $tr_planet2[$phase['id']]['in_house_id'];

                        // 成相星加分 加分*相位容许系数*成相本命星体影响系数
                        if(isset($planet_score[$phase['id']]))
                            $planet_score[$phase['id']] += $add * $phase_modulus * $orb_modulus;
                        // 成相星落宫加分
                        if(isset($house_score[$phase_in_house]))
                            $house_score[$phase_in_house] += $add * $phase_modulus * $orb_modulus;

                        $i_in_house = $tr_planet[$i]['in_house_id'];
                        // 行运星落宫加分
                        if(isset($house_score[$i_in_house])) $house_score[$i_in_house] += $h_add;
                    }
                }
            }
            // 木土天海冥
            else
            {
                if(!empty($tr_planet[$i]['phase']))
                {
                    foreach ($tr_planet[$i]['phase'] as $phase)
                    {
                        $add = 0;
                        // 刑冲合
                        if(in_array($phase['phase_e'],[0,90,180]))
                        {
                            if($i == 7 || $i == 8)
                            {
                                $add = 10;
                            }
                            elseif($i == 9)
                            {
                                $add = 8;
                            }
                            elseif($i == 6)
                            {
                                $add = 12;
                            }
                            elseif($i == 5)
                            {
                                $add = 15;
                            }
                        }
                        // 拱六分
                        elseif(in_array($phase['phase_e'],[60,120]))
                        {
                            if($i == 7 || $i == 8)
                            {
                                $add = 6;
                            }
                            elseif($i == 9)
                            {
                                $add = 4;
                            }
                            elseif($i == 6)
                            {
                                $add = 9;
                            }
                            elseif($i == 5)
                            {
                                $add = 11;
                            }
                        }

                        $h_add = 0;

                        if($i == 7 || $i == 8)
                        {
                            $h_add = 3;
                        }
                        elseif($i == 9)
                        {
                            $h_add = 2;
                        }
                        elseif($i == 6)
                        {
                            $h_add = 5;
                        }
                        elseif($i == 5)
                        {
                            $h_add = 6;
                        }

                        // 成相星落宫
                        $phase_in_house = $tr_planet2[$phase['id']]['in_house_id'];

                        // 成相星加分
                        if(isset($planet_score[$phase['id']])) $planet_score[$phase['id']] += $add;
                        // 成相星落宫加分
                        if(isset($house_score[$phase_in_house])) $house_score[$phase_in_house] += $add;

                        $i_in_house = $tr_planet[$i]['in_house_id'];
                        // 行运星落宫加分
                        if(isset($house_score[$i_in_house])) $house_score[$i_in_house] += $h_add;
                    }
                }
            }

            //缓滞
            //	行运某星速度放缓乃至停滞，并与本命星体星体成相，会强烈影响该星所在宫位及成相星体及该星体宫位
            //		本星
            //			木土天海冥不计
            //			水金火+6
            //				若相星是日月时额外+10
            //		本星宫位
            //			+6
            //				若相星是日月时额外+6
            //		相星
            //			+10
            //				如本星是木星额外+10
            //		相星宫位
            //			+7
            //				如本星是木星额外+7
            if($tr_planet[$i]['speed'] < config('astrolog.speed')[$i] && !empty($tr_planet[$i]['phase']))
            {
                foreach ($tr_planet[$i]['phase'] as $phase)
                {
                    if($i == 2 || $i == 3 || $i == 4)
                    {
                        if(1)
                        {

                        }
                    }
                }
            }
        }

        //	额外激发（加在最终数据上面，需乘以容许系数）
        //		多重
        //			本命某星与两颗星体成相
        //				该星/宫主题额外+5
        //			三颗
        //				+10
        //			四颗
        //				+15
        //			五颗及以上
        //				+20
        //		日月食
        //			日月食点与本命星体成相，该星体及日月所在宫位加分
        //				行运日月宫位+9
        //				星体与其所在宫位
        //					合冲+12
        //					刑拱六分+9
    }
}